﻿#region Usings

using System;
using System.Xml.XPath;
using Yandex.Market.Api.YmlSerialization;

#endregion

namespace Yandex.Market.Api.Model
{
    ///<summary>
    ///  Использование элемента param является опциональным.<br />
    ///  Характеристики, переданные через элемент param, используются для фильтрации товарных предложений в результатах поиска Маркета.<br />
    ///  Параметры, переданные через YML, при фильтрации являются более приоритетными по сравнению с автоматически извлеченными данными из элементов description и name.<br />
    ///  Названия и значения характеристик, переданных через элемент param, служат только для фильтрации товарных предложений и не отображаются в составе товарного предложения.<br />
    ///  Набор параметров можно составлять самостоятельно, ориентируясь на существующие характеристики товара в фильтре соответствующей категории.<br /> 
    ///  Требований к наименованию параметров и их количеству нет.
    ///</summary>
    [YmlSerializeAs("param")]
    [Serializable]
    public class Param
    {
        /// <summary>
        ///   NAME — название параметра. Обязательный элемент
        /// </summary>
        [YmlSerializeAs("name")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(0)]
        public string Name { get; set; }

        /// <summary>
        ///   UNIT — единица измерения (для числовых параметров);
        /// </summary>
        [YmlSerializeAs("unit")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(10)]
        public string Unit { get; set; }

        /// <summary>
        ///   VALUE — значение параметра. Значение обязательно
        /// </summary>
        [YmlValueForClass]
        public string Value { get; set; }

        internal static Param CreateParamFromXml(XPathNavigator nav)
        {
            Param param = new Param();
            param.Value = nav.Value;

            if(!string.IsNullOrEmpty(nav.GetAttribute("name", "")))
                param.Name = nav.GetAttribute("name", "");

            if(!string.IsNullOrEmpty(nav.GetAttribute("unit", "")))
                param.Unit = nav.GetAttribute("unit", "");

            return param;
        }
    }
}